package com.sxj.corejava.code07_面向对象;

/**
 * @author 石小俊
 * @date 2024年03月13日 16:20
 */
public class Test04_static关键字 {
    public static void main(String[] args) {
        SomeClass sc1 = new SomeClass();
        SomeClass sc2 = new SomeClass();
        SomeClass sc3 = new SomeClass();

        sc1.name = "爸爸";
        System.out.println(sc1.name);
        sc2.name = "妈妈";
        System.out.println(sc2.name);
        sc3.name = "儿子";
        System.out.println(sc3.name);

//        sc1.phone = "13812345678";
        SomeClass.phone = "13812345678";
        System.out.println(sc1.phone);
//        sc2.phone = "13912345678";
        SomeClass.phone = "13912345678";
        System.out.println(sc2.phone);
//        sc3.phone = "13312345678";
        SomeClass.phone = "13312345678";
        System.out.println(sc3.phone);

        System.out.println("*******************************");
        System.out.println(sc1.name);
        System.out.println(sc2.name);
        System.out.println(sc3.name);
        // System.out.println(SomeClass.name); // 只有静态变量才能通过类名.属性名访问
        System.out.println(sc1.phone);
        System.out.println(sc2.phone);
        System.out.println(sc3.phone);
        // 在实际开发中,静态变量建议使用类名.属性名,而不建议使用对象.属性名
        System.out.println(SomeClass.phone);
        System.out.println("*******************************");
        sc1.show();
        sc1.test();
        // SomeClass.show();// 只有静态方法才能通过类名.方法名访问
        // 在实际开发中,静态方法建议使用类名.方法名,而不建议使用对象.方法名
        SomeClass.test();
    }
}

class SomeClass{
    String name;
    static String phone;

    // 实例方法
    public void show(){
        // 实例方法既可以访问实例属性
        System.out.println(name);
        // 也可以访问静态属性
        System.out.println(phone);

        // 实例方法中既可以访问实例方法
        show2();
        // 也可以访问静态方法
        test2();
    }

    public void show2(){
        System.out.println();
        System.out.println("普通方法");
    }


    // 静态方法
    public static void test(){
        // 静态方法只能访问静态属性
        System.out.println(phone);
        // 不能访问实例属性
        // System.out.println(name);

        // 静态方法只能访问静态方法
        test2();
        // 不能访问实例方法
        // show(); // 报错
    }

    public static void test2(){
        System.out.println("静态方法");
    }
}
